package generationTache.generationAleatoire;

import generationTache.IGenerationTache;

import java.util.ArrayList;
import java.util.Random;

import outils.MathTR;
/**
 * 
 * @author nicolas rault et matthieu allon
 * Permet de générer des taches aperiodiques aléatoirement.
 */
public class TacheAperiodiqueAl extends TachePeriodiqueAl{
	
	/**
	 * Constructeur des taches apériodiques aléatoires.
	 * @param Up Part du processus alloué aux taches periodiques
	 * @param nbTache nombre de tache périodique totales(utile seulement pour le constructeur via le super)
	 * @param listeTacheP liste des taches périodiques, permet de calculer le ppcm
	 */
	public TacheAperiodiqueAl(int Up, ArrayList<IGenerationTache> listeTacheP) {
		super(Up);

		super.setDi(0);
		int ppcm = 0;
		//Calcul du PPCM
		if(listeTacheP.size() > 2)
		{
			ppcm = MathTR.calculePPCM(listeTacheP.get(0).getPi(), listeTacheP.get(1).getPi());
			for(int i = 2; i<listeTacheP.size(); i++)
			{
				ppcm = MathTR.calculePPCM(ppcm, listeTacheP.get(i).getPi());
			}
		}
		else
		{
			if(listeTacheP.size() == 2)
			{
				ppcm = MathTR.calculePPCM(listeTacheP.get(0).getPi(),listeTacheP.get(1).getPi());
			}
			else
			{
				ppcm = listeTacheP.get(0).getPi();
			}
		}
		
		//Calcul du ri entre 0 et 90% du ppcm
		int nbAleatoire = 0;
		while(nbAleatoire == 0){
			Random r = new Random();
			nbAleatoire = r.nextInt((ppcm/10*9) - 0);
		}
			
		super.setRi(nbAleatoire);
		nbAleatoire = 0;
		
		//Calcul du Ci entre 3 et 13 (nombre choisis arbitrairement)
		while(nbAleatoire == 0){
			Random r = new Random();
			nbAleatoire = 3+r.nextInt(10 - 0);			
		}		
		super.setCi(nbAleatoire);
		super.setActive(false);
	}
}
